﻿using Ortodoctor.gridComponent;
using Ortodoctor.modelo;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace Ortodoctor.Funcionario
{
    public partial class Tratamento : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (Session["USUARIO"] == null)
                Response.Redirect("Login.aspx");

            modeloProcedimentoCliente model = new modeloProcedimentoCliente();
            Grid grid = new Grid(model.getAll(), "id_procedimento_cliente");
            Session["GRID_TRATAMENTO"] = grid;

            selectID.ClientIDMode = System.Web.UI.ClientIDMode.Static;
            procedimento.ClientIDMode = System.Web.UI.ClientIDMode.Static;

            modeloCliente modelo = new modeloCliente();
            DataTable dt = modelo.getAll();
            dt.DefaultView.Sort = "[nome] ASC";
            dt = dt.DefaultView.ToTable();
            
            foreach (DataRow dr in dt.Rows)
            {
                selectID.Items.Add(new ListItem(dr["nome"].ToString(), dr["id_cliente"].ToString()));
            }
            
            modeloProcedimento modeloproc = new modeloProcedimento();
            dt = modeloproc.getAll();
            dt.DefaultView.Sort = "[nome_procedimento] ASC";
            dt = dt.DefaultView.ToTable();
            
            foreach (DataRow dr in dt.Rows)
            {
                procedimento.Items.Add(new ListItem(dr["nome_procedimento"].ToString(), dr["id_procedimento"].ToString()));
            }

            modeloOrcamento orc = new modeloOrcamento();
            Session["ORCAMENTOS_COM_CLIENTE"] = orc.getOrcamentosComClientes();    
        }

        [WebMethod]
        public static string getDados(string page, string rp, string sortname, string sortorder, string query, string qtype)
        {
            Grid grid = ((Grid)HttpContext.Current.Session["GRID_TRATAMENTO"]);
            grid.page = Convert.ToInt32(page);
            DataTable dt = grid.dados.Clone();

            if (string.IsNullOrEmpty(query))
            {
                int numeroItensPagina = Convert.ToInt32(rp);
                int numeroPagina = Convert.ToInt32(page);
                int inicio = numeroItensPagina * (numeroPagina - 1);

                for (int i = inicio; i < inicio + numeroItensPagina && i < grid.dados.Rows.Count; ++i)
                {
                    DataRow dr = dt.NewRow();
                    foreach (DataColumn dc in dt.Columns)
                        dr[dc.ColumnName] = grid.dados.Rows[i][dc.ColumnName];

                    dt.Rows.Add(dr);
                }
                if (dt.Rows.Count > 0)
                {
                    dt.DefaultView.Sort = sortname + " " + sortorder;
                    dt = dt.DefaultView.ToTable();
                }
            }
            else
            {
                dt = grid.dados.Copy();
                dt.DefaultView.RowFilter = string.Format("[{0}] like '%{1}%'", qtype, query);
                dt = dt.DefaultView.ToTable();
            }
            return grid.getDadosToJson(dt);
        }

        [WebMethod]
        public static string addToTable(string dados)
        {            
            string[] array = dados.Split('|');
            modeloCliente mc = new modeloCliente(); //bruno adicionou
            modeloProcedimento mp = new modeloProcedimento(); //bruno adicionou
            string nome = mc.getClientNome(array[0]);//bruno adicionou
            string nome_procedimento = mp.getProcedimentoNome(array[1]); //bruno adicionou
            
            modeloProcedimentoCliente model = new modeloProcedimentoCliente();
            int p0 = 0; int p1 = 0; int p2 = 0; int p3 = 0;
            try { p0 = Convert.ToInt32(array[1]); } catch (Exception e) { p0 = 0; }
            try { p1 = Convert.ToInt32(array[0]); } catch (Exception e) { p1 = 0; }
            try { p2 = Convert.ToInt32(array[4]); } catch (Exception e) { p2 = 0; }
            try { p3 = Convert.ToInt32(array[2]); } catch (Exception e) { p3 = 0; }

            Componentes.Procedimento_Cliente proc =
                new Componentes.Procedimento_Cliente(-1, p0, p1, p2, p3);
            if ((p0 != 0) && (p1 != 0) && (p2 != 0) && (p3 != 0))
            {
                int id = model.insert(proc);
                proc.IdProcedimentoCliente = id;
                Grid grid = ((Grid)HttpContext.Current.Session["GRID_TRATAMENTO"]);
                DataTable retorno = model.getProcedimentoCliente(id);
                DataRow dr = grid.dados.NewRow();
                dr["id_procedimento_cliente"] = id;
                //bruno mudou aki - antes tava dr["nome"] = retorno.Rows[0]["nome"];
                //agora ta
                dr["nome"] = nome;
                //bruno mudou aki - antes tava dr["nome_procedimento"] = retorno.Rows[0]["nome_procedimento"];
                //agora ta
                dr["nome_procedimento"] = nome_procedimento;
                dr["tempo_tratamento"] = array[2];
                dr["valor_parcela"] = array[3];
                dr["valor_total"] = proc.ValorTotal;
                dr["dia_vencimento"] = array[5];

                DateTime data = new DateTime();
                int mes = DateTime.Now.Month;
                int ano = DateTime.Now.Year;

                int cont = 0;
                modeloParcelas parcelas = new modeloParcelas();
                double d = 0;
                try { d = Convert.ToDouble(array[3]); }
                catch (Exception e) { }
                parcelas.insert(new Componentes.Parcelas(-1,
                                                        d,
                                                        DateTime.Now,
                                                        id,
                                                        "EM DIA"));

                for (int i = 1; i < Convert.ToInt32(array[2]); ++i)
                {
                    int dia = Convert.ToInt32(array[5]);
                    for (int j = 0; j <= 5; ++j)
                    {
                        try
                        {
                            if (cont == 1)
                                cont++;
                            else
                                if (cont == 2)
                                {
                                    mes--;
                                    ++cont;
                                }
                            data = Convert.ToDateTime((dia) + "/" + (++mes) + "/" + (ano));
                            if (cont == 3)
                                cont = 0;
                            break;
                        }
                        catch
                        {
                            if (mes > 12)
                            {
                                mes = 0;
                                ano++;
                            }
                            else
                            {
                                dia = 1;
                                ++cont;
                            }
                        }

                    }
                    parcelas = new modeloParcelas();
                    d = 0;
                    try {d= Convert.ToDouble(array[3]); }
                    catch (Exception e) { }
                    parcelas.insert(new Componentes.Parcelas(-1,
                                                            d,
                                                            data,
                                                            id,
                                                            "EM DIA"));

                }

                grid.total++;
                grid.dados.Rows.Add(dr);

                HttpContext.Current.Session["GRID_TRATAMENTO"] = grid;
                return "adicionou";
            }else return "Falha";
        }

        [WebMethod]
        public static string editTable(int id, string dados)
        {
            string[] array = dados.Split('|');
            modeloProcedimentoCliente model = new modeloProcedimentoCliente();
            int p0 = 0; int p1 = 0; int p2 = 0; int p3 = 0;
            try { p0 = Convert.ToInt32(array[1]); } catch (Exception e) { p0 = 0; }
            try { p1 = Convert.ToInt32(array[0]); } catch (Exception e) { p1 = 0; }
            try { p2 = Convert.ToInt32(array[4]); } catch (Exception e) { p2 = 0; }
            try { p3 = Convert.ToInt32(array[2]); } catch (Exception e) { p3 = 0; }

            Componentes.Procedimento_Cliente proc =
                new Componentes.Procedimento_Cliente(-1, p0, p1, p2, p3);

            Grid grid = ((Grid)HttpContext.Current.Session["GRID_TRATAMENTO"]);
            DataRow dr = grid.dados.Select("[id_procedimento_cliente]="+id)[0];

            dr["valor_parcela"] = array[3];
            dr["valor_total"] = proc.ValorTotal;

            model.update(proc);

            modeloParcelas parcelas = new modeloParcelas();
            parcelas.update(new Componentes.Parcelas(-1,
                                                    Convert.ToDouble(array[3]),
                                                    DateTime.Now,
                                                    id,
                                                    "EM DIA"));
            
            HttpContext.Current.Session["GRID_TRATAMENTO"] = grid;
            return "editou";
        }

        [WebMethod]
        public static string deleteFromTable(int id)
        {
            Grid grid = ((Grid)HttpContext.Current.Session["GRID_TRATAMENTO"]);
            grid.deleteFromTable(id);
            modeloProcedimentoCliente proc = new modeloProcedimentoCliente();
            proc.delete(id);
            HttpContext.Current.Session["GRID_TRATAMENTO"] = grid;
            return "removeu";
        }

        [WebMethod]
        public static string getDataFromProClient(int id)
        {
            modeloProcedimentoCliente model = new modeloProcedimentoCliente();
            DataTable retorno = model.getProcedimentoCliente(id);
            Grid grid = ((Grid)HttpContext.Current.Session["GRID_TRATAMENTO"]);

            DataRow[] drows = grid.dados.Select("[id_procedimento_cliente]="+id);

            string str = "";
            str += retorno.Rows[0]["nome"] + "|";
            str += retorno.Rows[0]["nome_procedimento"] + "|";
            str += retorno.Rows[0]["tempo_tratamento"] + "|";
            str += drows[0]["valor_parcela"] + "|";
            str += retorno.Rows[0]["valor_total"] + "|";
            str += drows[0]["dia_vencimento"];

            return str;
        }

        protected void cliente_Init(object sender, EventArgs e)
        {
            modeloOrcamento modelo = new modeloOrcamento();
            foreach (DataRow dr in modelo.getClientesComOrcamento().Rows)
                cliente.Items.Add(new ListItem(dr["nome"].ToString(), dr["id_cliente"].ToString()));
        }

        [WebMethod]
        public static string getDataToOrcamento(int id_cliente)
        {
            if (HttpContext.Current.Session["ORCAMENTOS_COM_CLIENTE"] != null)
            {
                DataTable dt = ((DataTable)HttpContext.Current.Session["ORCAMENTOS_COM_CLIENTE"]);
                dt.DefaultView.RowFilter = "[id_cliente]=" + id_cliente;
                dt = dt.DefaultView.ToTable();
                string select = "<select name='ctl00$conteudo$tratamento' id='conteudo_tratamento' style='width:245px;'>";
                foreach(DataRow dr in dt.Rows)
                    select += string.Format("<option value='{0}'>{1}</option>", dr["id_procedimento"].ToString(), dr["nome_procedimento"].ToString());
                select += "</select>";
                return select;
            }
            return "";
        }

        [WebMethod]
        public static string addFromOrcamento(int id_cliente, int id_procedimento, int diaVenc)
        {
            modeloOrcamento modelOrc = new modeloOrcamento();
            DataTable Orc = modelOrc.getOrcamentoTotal(id_cliente, id_procedimento);

            modeloProcedimentoCliente model = new modeloProcedimentoCliente();
            double d0 = 0;
            int de1 = 0;
            try { d0 = Convert.ToDouble(Orc.Rows[0]["valor_total"]); } catch (Exception e) { }
            try { de1 = Convert.ToInt32(Orc.Rows[0]["tempo_tratamento"]); } catch (Exception e) { }

            Componentes.Procedimento_Cliente proc =
                new Componentes.Procedimento_Cliente(-1,
                                         id_procedimento,
                                         id_cliente,
                                         d0,
                                         de1);
            int id = model.insert(proc);
            proc.IdProcedimentoCliente = id;
            Grid grid = ((Grid)HttpContext.Current.Session["GRID_TRATAMENTO"]);
            DataTable retorno = model.getProcedimentoCliente(id);
            DataRow dr = grid.dados.NewRow();
            dr["id_procedimento_cliente"] = id;
            dr["nome"] = retorno.Rows[0]["nome"];
            dr["nome_procedimento"] = retorno.Rows[0]["nome_procedimento"];
            dr["tempo_tratamento"] = Orc.Rows[0]["tempo_tratamento"];
            dr["valor_parcela"] = Orc.Rows[0]["valor_parcela"];
            dr["valor_total"] = proc.ValorTotal;
            dr["dia_vencimento"] = diaVenc;

            DateTime data = new DateTime();
            int mes = DateTime.Now.Month;
            int ano = DateTime.Now.Year;

            int cont = 0;
            for (int i = 1; i <= Convert.ToInt32(Orc.Rows[0]["tempo_tratamento"]); ++i)
            {
                int dia = Convert.ToInt32(diaVenc);
                for (int j = 0; j <= 5; ++j)
                {
                    try
                    {
                        if (cont == 1)
                            cont++;
                        else
                            if (cont == 2)
                            {
                                mes--;
                                ++cont;
                            }
                        data = Convert.ToDateTime((dia) + "/" + (++mes) + "/" + (ano));

                        if (cont == 3)
                            cont = 0;
                        break;
                    }
                    catch
                    {
                        if (mes > 12)
                        {
                            mes = 0;
                            ano++;
                        }
                        else
                        {
                            dia = 1;
                            ++cont;
                        }
                    }

                }
                modeloParcelas parcelas = new modeloParcelas();
                double de = 0;
                try { de = Convert.ToDouble(Orc.Rows[0]["valor_parcela"]); } catch (Exception e) { }
                parcelas.insert(new Componentes.Parcelas(-1,
                                                        de,
                                                        data,
                                                        id,
                                                        "EM DIA"));

            }

            grid.total++;
            grid.dados.Rows.Add(dr);

            HttpContext.Current.Session["GRID_TRATAMENTO"] = grid;
            modelOrc = new modeloOrcamento();
            modelOrc.delete(id_cliente, id_procedimento);
            return "adicionou";
        }
    }
}